/* ------------------------------------------ wx jssdk工具类 ------------------------------------------ */

// jsApiList，所有需要使用的api需在这里指定
const jsApiList = [
  "updateAppMessageShareData", // 分享给朋友
  "updateTimelineShareData", // 分享到朋友圈
  "hideMenuItems", // 隐藏菜单项
  "showMenuItems" // 显示菜单项
];

/**
 * config接口注入权限验证配置
 * 所有需要使用JS-SDK的页面必须先注入配置信息，否则将无法调用，同一个url仅需调用一次，对于变化url的SPA的web app可在每次url变化时进行调用
 */
export const config = () => {
  return new Promise(async (resolve, reject) => {
    // 请求参数
    const params = {
      param: window.location.href.split("#")[0]
    };
    const res = await utils.http
      .get(interfaces.global.getJssdkConfig, params, {
        needLoading: false
      })
      .catch(() => {});
    if (res) {
      wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
        appId: res.appId, // 必填，公众号的唯一标识
        timestamp: res.timestamp, // 必填，生成签名的时间戳
        nonceStr: res.nonceStr, // 必填，生成签名的随机串
        signature: res.signature, // 必填，签名，见附录1
        jsApiList // 必填，需要使用的JS接口列表，所有JS接口列表见附录2
      });
      wx.ready(() => {
        resolve(res);
      });
      wx.error(error => {
        reject(error);
      });
    } else {
      reject("jssdk config参数获取失败");
    }
  });
};

/**
 * 微信分享给朋友
 * @param {*} params 分享对象
 */
export const shareFriend = (params = {}) => {
  return new Promise((resolve, reject) => {
    wx.ready(() => {
      //需在用户可能点击分享按钮前就先调用
      wx.updateAppMessageShareData({
        title: params.title, // 分享标题
        desc: params.desc, // 分享描述
        link: params.link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: params.imgUrl, // 分享图标
        success: () => {
          // 设置成功
          resolve(true);
        },
        fail: error => {
          // 失败
          reject(error);
        }
      });
    });
  });
};

/**
 * 微信分享到朋友圈
 * @param {*} params 分享对象
 */
export const shareMoment = (params = {}) => {
  return new Promise((resolve, reject) => {
    wx.ready(() => {
      //需在用户可能点击分享按钮前就先调用
      wx.updateTimelineShareData({
        title: params.title, // 分享标题
        link: params.link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: params.imgUrl, // 分享图标
        success: () => {
          // 设置成功
          resolve(true);
        },
        fail: error => {
          // 失败
          reject(error);
        }
      });
    });
  });
};

// 所有菜单项列表
// ------基本类------
// 举报: "menuItem:exposeArticle"
// 调整字体: "menuItem:setFont"
// 日间模式: "menuItem:dayMode"
// 夜间模式: "menuItem:nightMode"
// 刷新: "menuItem:refresh"
// 查看公众号（已添加）: "menuItem:profile"
// 查看公众号（未添加）: "menuItem:addContact"

// ------传播类------
// 发送给朋友: "menuItem:share:appMessage"
// 分享到朋友圈: "menuItem:share:timeline"
// 分享到QQ: "menuItem:share:qq"
// 分享到Weibo: "menuItem:share:weiboApp"
// 收藏: "menuItem:favorite"
// 分享到FB: "menuItem:share:facebook"
// 分享到 QQ 空间："menuItem:share:QZone"

// ------保护类------
// 编辑标签: "menuItem:editTag"
// 删除: "menuItem:delete"
// 复制链接: "menuItem:copyUrl"
// 原网页: "menuItem:originPage"
// 阅读模式: "menuItem:readMode"
// 在QQ浏览器中打开: "menuItem:openWithQQBrowser"
// 在Safari中打开: "menuItem:openWithSafari"
// 邮件: "menuItem:share:email"
// 一些特殊公众号: "menuItem:share:brand"

// 不指定隐藏/显示的菜单项列表，默认的菜单项列表
const defaultMenuList = [
  // 传播类
  "menuItem:share:appMessage",
  "menuItem:share:timeline",
  "menuItem:share:qq",
  "menuItem:share:weiboApp",
  "menuItem:favorite",
  "menuItem:share:facebook",
  "menuItem:share:QZone",

  // 保护类
  "menuItem:copyUrl",
  "menuItem:openWithQQBrowser",
  "menuItem:openWithSafari"
];

/**
 * 隐藏微信菜单项(基本类菜单项不能隐藏，如刷新)
 * @param {*} menuList 要隐藏的菜单项列表
 */
export const hideMenuItems = (menuList = defaultMenuList) => {
  wx.ready(() => {
    wx.hideMenuItems({
      menuList // 要隐藏的菜单项，不能隐藏基本类菜单项
    });
  });
};

/**
 * 显示微信菜单项
 * @param {*} item 要显示的菜单项列表
 */
export const showMenuItems = (menuList = defaultMenuList) => {
  wx.ready(() => {
    wx.showMenuItems({
      menuList // 要显示的菜单项
    });
  });
};

const wechat = {
  config,
  shareFriend,
  shareMoment,
  hideMenuItems,
  showMenuItems
};

export default wechat;
